<?php

namespace App\Models\Traits;

trait HasPermissionType
{
    // 权限类型
    const TYPE_MENU = 'menu';      // 菜单权限
    const TYPE_BUTTON = 'button';  // 按钮权限
    const TYPE_DATA = 'data';      // 数据权限

    // 操作类型
    const ACTION_VIEW = 'view';         // 查看
    const ACTION_CREATE = 'create';     // 新增
    const ACTION_UPDATE = 'update';     // 编辑
    const ACTION_DELETE = 'delete';     // 删除
    const ACTION_EXPORT = 'export';     // 导出
    const ACTION_IMPORT = 'import';     // 导入
    const ACTION_AUDIT = 'audit';       // 审核
    const ACTION_ASSIGN = 'assign';     // 分配
    const ACTION_RESET = 'reset';       // 重置

    /**
     * 获取所有权限类型
     *
     * @return array
     */
    public static function getPermissionTypes(): array
    {
        return [
            self::TYPE_MENU => '菜单权限',
            self::TYPE_BUTTON => '按钮权限',
            self::TYPE_DATA => '数据权限',
        ];
    }

    /**
     * 获取所有操作类型
     *
     * @return array
     */
    public static function getActionTypes(): array
    {
        return [
            self::ACTION_VIEW => '查看',
            self::ACTION_CREATE => '新增',
            self::ACTION_UPDATE => '编辑',
            self::ACTION_DELETE => '删除',
            self::ACTION_EXPORT => '导出',
            self::ACTION_IMPORT => '导入',
            self::ACTION_AUDIT => '审核',
            self::ACTION_ASSIGN => '分配',
            self::ACTION_RESET => '重置',
        ];
    }

    /**
     * 生成权限编码
     *
     * @param string $resource 资源标识
     * @param string $action 操作类型
     * @return string
     */
    public static function generatePermissionCode(string $resource, string $action): string
    {
        return $resource . '.' . $action;
    }
}

